home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / mxcode / sb_pas10 / dmaports.txt < prev    next >
Text File  |  1993-01-25  |  8KB  |  164 lines

  1. * Quoted from "TechHelp!" - version unavailable.
  2.  
  3. Port  Description
  4. ▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  5. 000H-01fH DMA (Direct Memory Access) controller        See DMA Ports
  6.  
  7. 020H-03fH Interrupt Controller
  8.  
  9. ==============================================================================
  10.  
  11.  DMA (Direct Memory Access) is used for high-speed data transfers between I/O
  12.  devices and memory without intervention of the CPU.  It is typically employed
  13.  by diskette and hard disk drivers, but it could be used for streaming tape or
  14.  any other device as long as it does not interfere with the operation of other
  15.  standard devices.
  16.  
  17.  The original PC supports four 8-bit DMA channels, across a 20-bit address
  18.  space, using an Intel 8237A DMA controller chip.  The ▌AT▐ supports 7 DMA
  19.  channels by cascading a second 8237A DMA controller.  The differences between
  20.  PC and AT DMA are covered at the end of this section.
  21.  
  22. Channel  Usage in PC and XT
  23. ▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  24.    0     memory refresh    (highest priority)
  25.    1     not used
  26.    2     diskette adapter
  27.    3     hard disk adapter (lowest priority)
  28.  
  29. Port  Description
  30. ▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  31. 000H-007H DMA base address an offset registers
  32.        All are 16-bit registers: read/write the low byte, then the high byte
  33.        at the same I/O port.  Base addresses are offsets from a DMA Page (see
  34.        below).
  35.  
  36. 000H  Write: DMA channel 0 base address (also sets current address)
  37.       Read:  DMA channel 0 current address
  38. 001H  Write: DMA channel 0 base address and word count
  39.       Read:  DMA channel 0 current word count
  40. 002H  Write: DMA channel 1 base address
  41.       Read:  DMA channel 1 current address
  42. 003H  Write: DMA channel 1 base address and word count
  43.       Read:  DMA channel 1 current word count
  44. 004H  Write: DMA channel 2 base address                (diskette adapter)
  45.       Read:  DMA channel 2 current address              "
  46. 005H  Write: DMA channel 2 base address and word count  "
  47.       Read:  DMA channel 2 current word count           "
  48. 006H  Write: DMA channel 3 base address                (hard disk adapter)
  49.       Read:  DMA channel 3 current address              "
  50. 007H  Write: DMA channel 3 base address and word count  "
  51.       Read:  DMA channel 3 current word count           "
  52. ■■■■  ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  53. 008H-00fH DMA control/status registers
  54. 008H  Write: DMA command register
  55.       ╓7┬6┬5┬4┬3┬2┬1┬0╖
  56.       ║ │ │ │ │ │ │ │ ║
  57.       ╙╥┴╥┴╥┴╥┴╥┴╥┴╥┴╥╜ bit
  58.        ║ ║ ║ ║ ║ ║ ║ ╚═ 0: 1=enable memory-to-memory DMA (ch0═ch1)
  59.        ║ ║ ║ ║ ║ ║ ╚═══ 1: 1=enable Ch0 address hold
  60.        ║ ║ ║ ║ ║ ╚═════ 2: 1=disable controller
  61.        ║ ║ ║ ║ ╚═══════ 3: 1=select compressed timing mode
  62.        ║ ║ ║ ╚═════════ 4: 1=enable rotating priority
  63.        ║ ║ ╚═══════════ 5: 1=select extended write mode; 0=late write
  64.        ║ ╚═════════════ 6: 1=select DRQ sensing as active high; 0=low
  65.        ╚═══════════════ 7: 1=select DACK sensing as active high; 0=low
  66.       Read:  DMA status register
  67.       ╓7┬6┬5┬4┬3┬2┬1┬0╖
  68.       ║ │ │ │ │ │ │ │ ║
  69.       ╙─┴─┴─┴─┴─┴─┴─┴─╜ bit
  70.        ╚══╦══╝ ╚═════╩═ 0-3: channel 0-3 has reached terminal count
  71.           ╚════════════ 4-7: channel 0-3 has a request pending
  72. 009H  Write: request register
  73.       ╓7┬6┬5┬4┬3┬2┬1┬0╖
  74.       ║  unused │ │   ║
  75.       ╙─┴─┴─┴─┴─┴╥┴─┴─╜ bit
  76.                  ║ ╚═╩═ 0-1: select channel (00=0; 01=1; 10=2; 11=3)
  77.                  ╚═════ 2: 1=set request bit for channel; 0=reset request
  78. 00aH  Write: single mask bit register
  79.       ╓7┬6┬5┬4┬3┬2┬1┬0╖
  80.       ║  unused │ │   ║
  81.       ╙─┴─┴─┴─┴─┴╥┴─┴─╜ bit
  82.                  ║ ╚═╩═ 0-1: select channel (00=0; 01=1; 10=2; 11=3)
  83.                  ╚═════ 2: 1=set mask for channel; 0=clear mask (enable)
  84. 00bH  Write: mode register
  85.       ╓7┬6┬5┬4┬3┬2┬1┬0╖
  86.       ║ │ │ │ │ │ │ │ ║
  87.       ╙─┴─┴╥┴╥┴─┴─┴─┴─╜ bit
  88.        ╚╦╝ ║ ║ ╚╦╝ ╚═╩═ 0-1: select channel (00=0; 01=1; 10=2; 11=3)
  89.         ║  ║ ║  ╚══════ 2-3: transfer type (00=verify=Nop; 01=write; 10=read)
  90.         ║  ║ ╚═════════ 4: 1=enable auto-initialization
  91.         ║  ╚═══════════ 5: 1=select address increment; 0=address decrement
  92.         ╚══════════════ 6-7: 00=demand mode; 01=single; 10=block; 11=cascade
  93.  
  94. 00cH  Write: clear byte pointer flip-flop.  Any write clears the flip-flop so
  95.              that the next write to any of the 16-bit registers is decoded as
  96.              the low byte.  The next is the high byte, then next is low, etc.
  97.  
  98. 00dH  Write: master clear.  Any OUT clears the ctrlr (must be re-initialized)
  99.       Read:  temporary reg.  Last byte in memory-to-memory xfer (not used)
  100.  
  101. 00eH  Write: Clear mask registers.  Any OUT enables all 4 channels.
  102.  
  103. 00fH  Write: master clear.  Clear or mask any or all of the channels.
  104.       ╓7┬6┬5┬4┬3┬2┬1┬0╖
  105.       ║       │ │ │ │ ║
  106.       ╙─┴─┴─┴─┴╥┴╥┴╥┴╥╜ bit
  107.                ║ ║ ║ ╚═ 0: 1=mask channel 0; 0=enable
  108.                ║ ║ ╚═══ 1: 1=mask channel 1;
  109.                ║ ╚═════ 2: 1=mask channel 2;
  110.                ╚═══════ 3: 1=mask channel 3;
  111.       Read:  temporary reg.  Last byte in memory-to-memory xfer (not used)
  112.  
  113. ■■■■  ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  114. 081H-08fH DMA page registers.
  115.       To select a starting address for a DMA operation, do an OUT to the page
  116.       register (ports 81H-83H) for the selected channel then set the base
  117.       address (ports 00H-07H) for the channel.  A page register is set with a
  118.       4-bit value that represents bits 16-19 of the 20-bit DMA address.  Since
  119.       the current address is a 16-bit value, it is not possible to cross a 64K
  120.       boundary (eg, address 1000:0, 2000:0, etc.) with a DMA operation.
  121.  
  122. 081H  Channel 2 page register  (diskette DMA)
  123. 082H  Channel 3 page register  (hard disk DMA)
  124. 083H  Channel 1 page register
  125.  
  126. ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  127. ┌─────────┐
  128. │▌AT▐ DMA │ The DMA system on the AT is basically upwardly-compatible with PC
  129. └─────────┘ and XT DMA.  In addition to the four 8-bit channels of the PC, the
  130.  AT adds a second 8237A-5 DMA controller which supports channels 4-7.
  131.  
  132. Channel  Usage in AT
  133. ▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  134.    0     spare                                   ─┐
  135.    1     SDLC (Synchronous Data Link Control)     ╞═ 8-bit DMA channels
  136.    2     diskette adapter                         │                           │
  137.    3     hard disk adapter                       ─┘                           │
  138.    4     (controller 2) cascade for controller 1 ─┐                           │
  139.    5     spare                                    ╞═ 16-bit DMA channels     │
  140.    6     spare                                    │                           │
  141.    7     spare                                   ─┘                           │
  142.                                                                               │
  143. ■■■■  ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■│
  144. 081H-08fH DMA page registers.  On the AT, all 8 bits of the Page registers are│
  145.       used.  They become the high 8-bits of a 24-bit address space (with the  │
  146.       low 16-bits being set in a channel's base/current address register).    │
  147.       The page size is 128K (64K words) so DMA transfers must not cross a 128K│
  148.       boundary (eg, address 2000:0, 4000:0, 6000:0, etc.)                     │
  149.                                                                               │
  150. 081H  Channel 2 page register  (diskette DMA)  (address bits 16-23)           │
  151. 082H  Channel 3 page register  (hard disk DMA) (address bits 16-23)           │
  152. 083H  Channel 1 page register                  (address bits 16-23)           │
  153. 087H  Channel 0 page register                  (address bits 16-23)           │
  154. 089H  Channel 6 page register  (address bits 17-23)                           │
  155. 08bH  Channel 5 page register  (address bits 17-23)                           │
  156. 08aH  Channel 7 page register  (address bits 17-23)                           │
  157. 0ceH  Channel 7 current word count
  158. ■■■■  ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  159.  
  160. 0d0H-0dfH ▌AT▐ DMA control/status registers
  161.  
  162.  
  163. ===================================================================
  164.